const db = require("../db/mysql");
const insertArticleCateSql = "insert into ev_articles set ?";
const delArticalSql = "update ev_articles set is_delete=1 where id=?";
const authorArticalSql = "select id,cover_img,pub_date,star_num,title,watch_num,content from ev_articles where author_id=?";
const userDropArticalIsExitSql = "select * from ev_user_draft where user_id=?";
const addDropArticalSql = "insert into ev_user_draft set ?";
const updateDropArticalSql =  "update ev_user_draft set ? where user_id=?";
const addArticalWatchNumSql  = "update ev_articles set watch_num=watch_num+1 where id=?";
//(select id,cover_img,pub_date from ev_articles ) union (select colum1,colum2...columN from tableB )
const getArtcateDetailByIdSql = `
select  ev_user.nickname,ev_user.userPic,ev_articles.title,ev_articles.content,ev_articles.comment_num,ev_articles.star_num,ev_articles.watch_num,ev_articles.cate_id,ev_articles.cate_pid from ev_user
	LEFT JOIN ev_articles on ev_user.id=ev_articles.author_id where ev_articles.id=?
`
const nodeExcel = require('excel-export');
/**
 * 发布文章
 * @param {*} req 
 * @param {*} res 
 */
exports.publicArtical=(req,res)=>{
    db.query(insertArticleCateSql,req.body,(err,result)=>{
        if (err) {
            return res.cc(err)
        }
        if (result.affectedRows !== 1) {
            return res.cc("新增文章失败，请稍后再试")
        }
        return res.cc("新增文章成功！",0)
    })
}
/**
 * 发布草稿箱
 * @param {*} req 
 * @param {*} res 
 */
exports.publicDraftArtical=(req,res)=>{
    let {draftContent,userId,draftTitle,prePostUserPic,articalCatePid,articalId} = req.body;
    var obj = {
        user_id:userId,
        draft_title:draftTitle,
        draft_content:draftContent,
        artical_cate_pid:articalCatePid,
        artical_cate_id:articalId,
        state:1,
        pre_post_user_pic:prePostUserPic
    }
    db.query(userDropArticalIsExitSql,userId,function(errs,resultes){
        if (errs) { 
            return res.cc(err)
        }
        if (resultes.length>0) {
            //存在 更改
            var user_id = obj.user_id;
            delete obj.user_id;
            db.query(updateDropArticalSql,[obj,user_id],(err,result)=>{
                if (err) {
                    return res.cc(err)
                }
                console.log(result);
                // 执行成功
                return res.send({
                    status:0,
                    message:"更改草稿文章成功！",
                    data:result[0]
                })
            })
        }else{
            //不存在新增
            db.query(addDropArticalSql,obj,(err,result)=>{
                if (err) {
                    return res.cc(err)
                }
                if (result.affectedRows !== 1) {
                    return res.cc("新增草稿文章失败，请稍后再试")
                }
                return res.cc("新增草稿文章成功！",0)
            })
        }})
}
/**
 * 删除文章
 * @param {*} req 
 * @param {*} res 
 */
exports.delArtical = (req,res)=>{
    db.query(delArticalSql,req.body.id,(err,result)=>{
        if (err) {
            return res.cc(err)
        }
        if (result.affectedRows !== 1) {
            return res.cc("删除文章失败，请稍后再试")
        }
        return res.cc("删除文章分类成功！")
    })
}
/**
 * 修改文章
 * @param {*} req 
 * @param {*} res 
 */
exports.updateArtical = (req,res)=>{
    console.log(req.body);
    res.cc("修改文章测试")
}
/**
 * 查询文章列表
 * @param {*} req 
 * @param {*} res 
 */
exports.searchArtical = (req,res)=>{
    db.query(authorArticalSql,[req.body.uid,req.body.id],(err,result)=>{
        if (err) {
            return res.cc(err)
        }
        // 执行成功
        return res.send({
            status:0,
            message:"获取文章列表成功！",
            data:result
        })
    })
}
/**
 * 获取用户文章详情，阅读量+1
 * @param {*} req 
 * @param {*} res 
 */
exports.searchArticalDetailById = (req,res)=>{
    db.query(getArtcateDetailByIdSql,[req.body.id],(err,result)=>{
        if (err) {
            return res.cc(err)
        }
        db.query(addArticalWatchNumSql,[req.body.id],(err1,result1)=>{
            if (err1) {
                return res.cc(err1)
            }
            return res.send({
                status:0,
                message:"获取文章详情成功！",
                data:result[0]
            })
        })
    })
}
/**
 * 以excel的形式导出文章
 */
exports.exportExcel = (req, res)=> {
    
    //创建一个写入格式map，其中cols(表头)，rows(每一行的数据);
    let conf = {};
    //手动创建表头中的内容
    let cols = ['文章标题', '文章姓名', '封面图','发布时间'];
    //在conf中添加cols
    conf.cols = [];
    for(let i = 0; i < cols.length; i++) {
        //创建表头数据所对应的类型,其中包括 caption内容 type类型
        let tits = {};
        //添加内容
        tits.caption = cols[i];
        //添加对应类型，这类型对应数据库中的类型，入number，data但一般导出的都是转换为string类型的
        tits.type = 'string';
        //将每一个表头加入cols中
        conf.cols.push(tits);
    }
    //mongoose查询数据库的用户信息
    db.query("select * from ev_articles",(err,data)=>{
        // return res.end("测试")
        if(err){
            //执行出错
            console.log(err)
        }else{
            //创建一个和表头对应且名称与数据库字段对应数据，便于循环取出数据
            let rows = ['title','conttent','cover_img','pub_data'];
            //用于承载数据库中的数据
            let datas =[];
            //循环数据库得到的数据
            for(let i = 0; i < data.length; i++){
                let row =[];//用来装载每次得到的数据
                //内循环取出每个字段的数据
                for(let j = 0; j < rows.length; j++){
                    // console.log(data[i][rows[j]]);
                    row.push(data[i][rows[j]]);
                }
                //将每一个{ }中的数据添加到承载中
                datas.push(row);
            }
            conf.rows = datas;
            //将所有数据写入nodeExcel中
            let result =nodeExcel.execute(conf);
            //设置响应头，在Content-Type中加入编码格式为utf-8即可实现文件内容支持中文
            res.setHeader('Content-Type', 'application/vnd.openxmlformats;charset=utf-8');
            //设置下载文件命名，中文文件名可以通过编码转化写入到header中。
            res.setHeader("Content-Disposition", "attachment; filename="+ encodeURI('用户信息表') + ".xlsx");
            //将文件内容传入
            return res.end(result,'binary');
        }
    })
}